home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / l2tpd_overflow.nasl < prev    next >
Text File  |  2005-01-14  |  2KB  |  72 lines

  1. #
  2. #
  3. # This script is (C) 2003 Renaud Deraison
  4. #
  5. #
  6.  
  7. if (description)
  8. {
  9.  script_id(11388);
  10.  script_bugtraq_id(5451);
  11.  script_cve_id("CVE-2002-0872", "CVE-2002-0873");
  12.  
  13.  script_version ("$Revision: 1.7 $");
  14.  script_name(english:"l2tpd < 0.68 overflow");
  15.  desc["english"] = "
  16. The remote host is running a version of l2tpd which is older or
  17. equal to 0.67. 
  18.  
  19. This version is vulnerable to a buffer overflow
  20. which may allow an attacker to gain a root shell on this host.
  21.  
  22. In addition, this program does not initialize its random number generator. 
  23. Therefore, an attacker may predict some key values and hijack L2TP sessions
  24. established to this host.
  25.  
  26. Solution : upgrade to l2tpd 0.68 or newer
  27. Risk factor : High";
  28.  
  29.  script_description(english:desc["english"]);
  30.  script_summary(english:"Determines the version of the remote l2tpd");
  31.  script_category(ACT_GATHER_INFO);
  32.  script_family(english:"Gain root remotely");
  33.  script_copyright(english:"This script is Copyright (C) 2003 Renaud Deraison");
  34.  exit(0);
  35. }
  36.  
  37.  
  38. function find_firmware(rep)
  39. {
  40.  local_var i, firmware;
  41.  
  42.  for(i=12;i<strlen(rep);i++)
  43.  { 
  44.   len = ord(rep[i]) * 256 + ord(rep[i+1]);
  45.   if(ord(rep[i]) & 0x80)len -= 0x80 * 256;
  46.   if(ord(rep[i+5]) == 6)
  47.   {
  48.    firmware = ord(rep[i+6]) * 256 + ord(rep[i+7]);
  49.    return firmware;
  50.   }
  51.   else i += len - 1;
  52.  }
  53.  return NULL;
  54. }
  55.  
  56. req =  raw_string(0xC8, 2, 0, 20, 0, 0, 0, 0,0,0,0,0,0,8, 0,0,0,0,0,0);
  57.  
  58.          
  59. soc = open_sock_udp(1701);
  60. send(socket:soc, data:req);
  61. r = recv(socket:soc, length:1024);
  62. if(!r)exit(0);
  63. close(soc);
  64. if(("l2tpd" >< r) || ("Adtran" >< r))
  65. {
  66.  firmware = find_firmware(rep:r);
  67.  hi = firmware / 256;
  68.  lo = firmware % 256;
  69.  
  70.  if((hi == 0x06)  && (lo <= 0x70))security_hole(port:1701, proto:"udp");
  71. }
  72.